package com.xbongbong.paas.toolbox.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * json 工具帮助类
 * @author zheng.li
 * @version v1.0
 * @date 2019/1/23 9:49
 * @since v1.0
 */
public class JsonHelperUtil {

    /**
     *  解析字符串为JSONArray格式数据
     * @param str 需要解析的字符串
     * @return JSONArray 数据（非Null）
     */
    public static JSONArray parseArray(String str){
        JSONArray resultArray;
        try{
            resultArray = JSONArray.parseArray(str);
        } catch(Exception e){
            resultArray = null;
        }
        if (resultArray == null){
            resultArray = new JSONArray();
        }
        return resultArray;
    }

    /**
     *  解析字符串为 List<T></> 格式数据
     * @param str 需要解析的字符串
     * @param clazz  类
     * @param <T> 指定类
     * @return List<T></>
     */
    public static <T> List<T> parseArray(String str, Class<T> clazz){
        /*
            ps：当指定类clazz中的存在引用其他自定义类时，该方法将会失效
         */
        List<T> resultList;
        try{
            resultList = JSONArray.parseArray(str,clazz);
        } catch(Exception e){
            resultList = null;
        }
        if (resultList == null){
            resultList = new ArrayList<>();
        }
        return resultList;
    }

    /**
     * 解析字符串为JSONObject格式数据
     * @param str 需要解析的字符串
     * @return JSONObject 数据（非Null）
     */
    public static JSONObject parseObject(String str){
        JSONObject resultObject;
        try{
            resultObject = JSONObject.parseObject(str);
        }catch(Exception e){
            resultObject = null;
        }
        if (resultObject == null){
            resultObject = new JSONObject();
        }
        return resultObject;
    }

    /**
     *  解析字符串为指定类数据
     * @param str 需要解析的字符串
     * @param clazz 类
     * @param <T> 指定类
     * @return T
     */
    public static <T> T parseObject(String str,Class<T> clazz){
        T resultObject;
        try{
            resultObject = JSONObject.parseObject(str,clazz);
        } catch(Exception e){
            resultObject = null;
        }
        return resultObject;
    }

    /**
     * 防止为null
     * @param resultObject
     * @return
     */
    public static JSONObject getJSONObject(JSONObject resultObject){
        if (resultObject == null){
            resultObject = new JSONObject();
        }
        return resultObject;
    }

    /**
     * 将非空的数据串加入数组
     *
     * @param array JSONArray对象
     * @param object 插入的数据
     * @author 饶龙
     * @date 2019/5/12 15:03
     * @since v1.0
     * @version v1.0
     * @update by zcp 从SaasListHelp移入
     */
    public static void addToJSONArray(JSONArray array, Object object) {
        if(object == null) {
            return;
        }
        if(object instanceof String) {
            String str = (String) object;
            if (!StringUtil.isEmpty(str)) {
                array.add(str);
            }
        } else {
            array.add(object);
        }

    }

    /**
     * 是否是json字符串
     *
     * @param test
     * @return
     */
    public final static boolean isJSONValid(String test) {
        if (StringUtil.isEmpty(test)) {
            return false;
        }
        try {
            JSONObject.parseObject(test);
        } catch (JSONException ex) {
            try {
                JSONObject.parseArray(test);
            } catch (JSONException ex1) {
                return false;
            }
        }
        return true;
    }

    public static void main (String[] args){
        String any = "发士大夫";
        System.out.println(parseArray(any));
        System.out.println(parseObject(any));
        System.out.println(parseArray("null", Long.class));
        System.out.println(isJSONValid(""));
    }

}
